package ai.people.netmon.telegram.service;

import ai.people.netmon.framework.domain.telegram.entity.Channels;
import ai.people.netmon.framework.domain.telegram.entity.Topic;
import ai.people.netmon.framework.domain.telegram.entity.Users;
import ai.people.netmon.framework.domain.telegram.vo.channels.ChatMessage;
import ai.people.netmon.framework.domain.telegram.vo.topic.AnalyzedTopic;
import ai.people.netmon.framework.model.response.PageResponse;
import ai.people.netmon.telegram.domain.request.AnalyzedListRequest;
import ai.people.netmon.telegram.domain.request.topic.RelatedMessageRequest;
import ai.people.netmon.telegram.domain.request.topic.RelatedTopicRequest;

import java.util.List;

/**
 * 主题分析服务
 *
 * @author yuanqinglong
 * @date 2022/1/14 17:47
 */
public interface TopicAnalysisService {



    /**
     * 获取主题
     *
     * @param topicId 主题id
     * @return {@link Topic}
     */
    Topic getTopic(Long topicId);


    /**
     * 添加主题
     *
     * @param topic 主题
     * @return int
     */
    void addTopic(Topic topic);


    /**
     * 更新主题
     *
     * @param topic 主题
     */
    void updateTopic(Topic topic);


    /**
     * 相关群组
     *
     * @param relatedChannelsRequest 相关群组请求参数
     * @return {@link PageResponse}<{@link Channels}>
     */
    PageResponse<Channels> relatedChannels(RelatedTopicRequest relatedChannelsRequest);


    /**
     * 相关账户
     *
     * @param relatedTopicRequest 相关账号请求参数
     * @return {@link PageResponse}<{@link Users}>
     */
    PageResponse<Users> relatedAccount(RelatedTopicRequest relatedTopicRequest);


    /**
     * 相关消息
     *
     * @param relatedMessageRequest 相关消息请求
     * @return {@link PageResponse}<{@link ChatMessage}>
     */
    PageResponse<ChatMessage> relatedMessage(RelatedMessageRequest relatedMessageRequest);


    /**
     * 已加主题分析列表
     *
     * @param analyzedListRequest 参数
     * @return {@link List}<{@link AnalyzedTopic}>
     */
    List<AnalyzedTopic> analyzedTopics(AnalyzedListRequest analyzedListRequest);


    /**
     * 删除主题
     *
     * @param topicId 主题id
     */
    void deleteTopic(Long topicId);

}
